//@ts-nocheck
//迭代器模式
class Iterator {
  //定义一个私有变量data，用于存储数据
  private data: any[]
  //定义一个私有变量index，用于记录当前迭代的位置
  private index: number = 0
  //构造函数，接收一个参数data，用于初始化data
  constructor(data: any[]) {
    this.data = data
  }
  //定义一个next方法，用于获取下一个元素
  next(): any | null {
    //如果还有下一个元素，则返回下一个元素，并将index加1
    if (this.hasNext()) {
      return null
    }
    return this.data[this.index++]
  }
  //定义一个hasNext方法，用于判断是否还有下一个元素
  hasNext(): boolean {
    //如果index大于data的长度，则没有下一个元素，返回false
    if (this.index > this.data.length) return false
    //否则有下一个元素，返回true
    return true
  }
}

//定义一个ConIterator类，用于创建Iterator对象
class ConIterator {
  //定义一个data变量，用于存储数据
  data: [10, 20, 30, 40, 50]
  //定义一个getIterator方法，用于创建Iterator对象
  getIterator(): Iterator {
    //返回一个新的Iterator对象，传入data作为参数
    return new Iterator(this.data)
  }
}
//创建一个ConIterator对象
const conIterator = new ConIterator()
//通过getIterator方法获取一个Iterator对象
const iterator = conIterator.getIterator()
//使用while循环遍历Iterator对象中的元素
while (iterator.hasNext()) {
  //打印出Iterator对象中的元素
  console.log(iterator.next())
}
